<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      //call()允许将属于一个对象的函数/方法分配给另一个对象并对其进行调用。
      //示例中call()向函数/方法提供一个新的值this。 通过调用，
      //您可以编写一次方法，然后在另一个对象中继承该方法，而不必为新对象重写该方法。
      function Product(name, price) {
        this.name = name;
        this.price = price;
      }

      function Food(name, price) {
        Product.call(this, name, price);
        this.category = "food";
      }

      document.write(new Food("cheese", 12).category + "<br>");

      //使用调用来链接对象的构造函数
      function Toy(name, price) {
        Product.call(this, name, price);
        this.category = "toy";
      }

      let cheese = new Food("cheese", 12);
      let robot = new Toy("robot", 85);
      document.write(cheese.name + "<br>" + robot.name + "<br>");

      //使用调用来调用函数而不指定参数
      var name = "Seagull";

      function display() { 
        document.write(this.name);
      }

      display.call();
    </script>
  </body>
</html>
